package com.sojson.util.pay.wx.bean;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sojson.base.impl.BaseUtilDto;
import com.sojson.config.exception.TransErrorCode;
import com.sojson.result.bean.Status;

/**
 * 微信普通接口响应Bean
 * 
 * @author liu
 * @date 2021-03-16
 */
public class WxResponse extends BaseUtilDto {

    /***/
    private static final long serialVersionUID = -444894164284969796L;

    /** 接口调用凭证 */
    private String accessToken;
    /** 凭证有效时间,单位: 秒 */
    private String expiresIn;
    /** 用户唯一标识 */
    private String openid;
    /** 会话密钥 */
    private String sessionKey;
    /** 用户在开放平台的唯一标识符 */
    private String unionid;
    /** 错误码 */
    @JsonIgnore
    private String errcode;
    /** 错误信息 */
    @JsonIgnore
    private String errmsg;
    /** 统一状态Bean */
    private Status cusStatus;

    public WxResponse() {}

    /**
     * 成功返回
     * 
     * @param code
     */
    public WxResponse(Integer code) {
        this(code, null);
    }

    /**
     * 返回失败
     * 
     * @param code
     * @param msg
     */
    public WxResponse(Integer code, String msg) {
        this(new Status(code, msg));
    }

    /**
     * 返回失败
     * 
     * @param transErrorCode
     */
    public WxResponse(TransErrorCode transErrorCode) {
        this(new Status(transErrorCode.getCode(), transErrorCode.getMsg()));
    }

    public WxResponse(Status status) {
        setCusStatus(status);
    }

    /**
     * 获取接口调用凭证
     * 
     * @return
     */
    public String getAccessToken() {
        return accessToken;
    }

    /**
     * 设置接口调用凭证
     * 
     * @param accessToken
     */
    @JsonProperty("access_token")
    @JSONField(name = "access_token")
    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
    }

    /**
     * 获取凭证有效时间,单位: 秒
     * 
     * @return
     */
    public String getExpiresIn() {
        return expiresIn;
    }

    /**
     * 设置凭证有效时间,单位: 秒
     * 
     * @param expiresIn
     */
    @JsonProperty("expires_in")
    @JSONField(name = "expires_in")
    public void setExpiresIn(String expiresIn) {
        this.expiresIn = expiresIn;
    }

    /**
     * 获取用户唯一标识
     * 
     * @return
     */
    public String getOpenid() {
        return openid;
    }

    /**
     * 设置用户唯一标识
     * 
     * @param openid
     */
    public void setOpenid(String openid) {
        this.openid = openid;
    }

    /**
     * 获取会话密钥
     * 
     * @return
     */
    public String getSessionKey() {
        return sessionKey;
    }

    /**
     * 设置会话密钥
     * 
     * @param session_key
     */
    @JsonProperty("session_key")
    @JSONField(name = "session_key")
    public void setSessionKey(String sessionKey) {
        this.sessionKey = sessionKey;
    }

    /**
     * 获取用户在开放平台的唯一标识符
     * 
     * @return
     */
    public String getUnionid() {
        return unionid;
    }

    /**
     * 设置用户在开放平台的唯一标识符
     * 
     * @param unionid
     */
    public void setUnionid(String unionid) {
        this.unionid = unionid;
    }

    /**
     * 获取错误码
     * 
     * @return
     */
    public String getErrcode() {
        return errcode;
    }

    /**
     * 设置错误码
     * 
     * @param errcode
     */
    public void setErrcode(String errcode) {
        this.errcode = errcode;
    }

    /**
     * 获取错误信息
     * 
     * @return
     */
    public String getErrmsg() {
        return errmsg;
    }

    /**
     * 设置错误信息
     * 
     * @param errmsg
     */
    public void setErrmsg(String errmsg) {
        this.errmsg = errmsg;
    }

    /**
     * 获取统一状态Bean
     * 
     * @return
     */
    public Status getCusStatus() {
        return cusStatus;
    }

    /**
     * 设置统一状态Bean
     * 
     * @param status
     */
    public void setCusStatus(Status cusStatus) {
        this.cusStatus = cusStatus;
    }

}